Jan-Philipp Kolb
27 April 2017
R Welt
Aktivität Nutzer
Das kann diese Schulung vermitteln:
Das kann sie nicht leisten:
Freie Beteiligung - modularer Aufbau (immer mehr Erweiterungspakete)
Der Download ist auf dieser Seite möglich:
Aber die meisten Menschen nutzen einen Editor oder ein graphical user interface (GUI).
Aus den folgenden Gründen:
Auf github sind alle Unterlagen für diesen Kurs zu finden.
Sechs Gründe Rstudio zu nutzen.
Wie man Rstudio nutzen kann.
date() und die R-version mit sessionInfo() heraus.date()## [1] "Thu Apr 27 21:45:43 2017"
sessionInfo()## R version 3.3.3 (2017-03-06)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 7 x64 (build 7601) Service Pack 1
##
## locale:
## [1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252
## [3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C
## [5] LC_TIME=German_Germany.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] backports_1.0.5 magrittr_1.5 rprojroot_1.2 tools_3.3.3
## [5] htmltools_0.3.5 yaml_2.1.13 Rcpp_0.12.6 stringi_1.1.1
## [9] rmarkdown_1.4 knitr_1.15.1 stringr_1.2.0 digest_0.6.12
## [13] evaluate_0.10
Vektoren und Zuweisungen
<- ist der Zuweisungsoperatorb <- c(1,2) # erzeugt ein Objekt mit den Zahlen 1 und 2mean(b) # berechnet den Mittelwert## [1] 1.5
Mit den folgenden Funktionen können wir etwas über die Eigenschaften des Objekts lernen:
length(b) # b hat die Länge 2## [1] 2
str(b) # b ist ein numerischer Vektor## num [1:2] 1 2
| Funktion | Bedeutung | Beispiel |
|---|---|---|
| length() | Länge | length(b) |
| max() | Maximum | max(b) |
| min() | Minimum | min(b) |
| sd() | Standardabweichung | sd(b) |
| var() | Varianz | var(b) |
| mean() | Mittelwert | mean(b) |
| median() | Median | median(b) |
Diese Funktionen brauchen nur ein Argument.
Andere Funktionen brauchen mehr:
| Argument | Bedeutung | Beispiel |
|---|---|---|
| quantile() | 90 % Quantile | quantile(b,.9) |
| sample() | Stichprobe ziehen | sample(b,1) |
max(b)## [1] 2
min(b)## [1] 1
sd(b)## [1] 0.7071068
var(b)## [1] 0.5
mean(b)## [1] 1.5
median(b)## [1] 1.5
quantile(b,.9)## 90%
## 1.9
sample(b,1) ## [1] 2
Erzeugen Sie einen Vektor b mit den Zahlen von 1 bis 5 und berechnen Sie…
den Mittelwert
die Varianz
die Standardabweichung
die quadratische Wurzel aus dem Mittelwert
| Datentyp | Beschreibung | Beispiel |
|---|---|---|
| numeric | ganze und reele Zahlen | 5, 3.462 |
| logical | logische Werte | FALSE, TRUE |
| character | Buchstaben und Zeichenfolgen | “Hallo” |
Quelle: R. Münnich und M. Knobelspieß (2007): Einführung in das statistische Programmpaket R
b <- c(1,2) # numeric
log <- c(T,F) # logical
char <-c("A","b") # character
fac <- as.factor(c(1,2)) # factorMit str() bekommt man den Objekttyp.
A1 <- c(1,2,3,4)
A1## [1] 1 2 3 4
A1[1]## [1] 1
A1[4]## [1] 4
A1[1:3]## [1] 1 2 3
A1[-4]## [1] 1 2 3
Beispieldaten generieren:
AGE <- c(20,35,48,12)
SEX <- c("m","w","w","m")Diese beiden Vektoren zu einem data.frame verbinden:
Daten <- data.frame(Alter=AGE,Geschlecht=SEX)Anzahl der Zeilen/Spalten herausfinden
nrow(Daten) # Zeilen## [1] 4
ncol(Daten) # Spalten## [1] 2
Indizieren eines dataframe:
AA <- 4:1
A2 <- cbind(A1,AA)
A2[1,1]## A1
## 1
A2[2,]## A1 AA
## 2 3
A2[,1]## [1] 1 2 3 4
A2[,1:2]## A1 AA
## [1,] 1 4
## [2,] 2 3
## [3,] 3 2
## [4,] 4 1
A <- matrix(seq(1,100), nrow = 4)
dim(A)## [1] 4 25
A3 <- array(1:8,c(2,2,2))
A3## , , 1
##
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## , , 2
##
## [,1] [,2]
## [1,] 5 7
## [2,] 6 8
A3[,,2]## [,1] [,2]
## [1,] 5 7
## [2,] 6 8
A4 <- list(A1,1)
A4## [[1]]
## [1] 1 2 3 4
##
## [[2]]
## [1] 1
A4[[2]]## [1] 1
# Ist 1 größer als 2?
1>2## [1] FALSE
1<2## [1] TRUE
1==2## [1] FALSE
Diese Operatoren eignen sich gut um Datensätze einzuschränken
Daten## Alter Geschlecht
## 1 20 m
## 2 35 w
## 3 48 w
## 4 12 m
Daten[AGE>20,]## Alter Geschlecht
## 2 35 w
## 3 48 w
Daten[SEX=="w",]## Alter Geschlecht
## 2 35 w
## 3 48 w
# gleiches Ergebnis:
Daten[SEX!="m",]## Alter Geschlecht
## 2 35 w
## 3 48 w
# Ergebnis in ein Objekt speichern
subDat <- Daten[AGE>20,]# mehrere Bedingeungen können mit
# & verknüpft werden:
Daten[AGE>18 & SEX=="w",]## Alter Geschlecht
## 2 35 w
## 3 48 w
# Sequenz von 1 bis 10
1:10## [1] 1 2 3 4 5 6 7 8 9 10
Daten[1:3,]## Alter Geschlecht
## 1 20 m
## 2 35 w
## 3 48 w
seq(-2,8,by=1.5)## [1] -2.0 -0.5 1.0 2.5 4.0 5.5 7.0
a <-seq(3,12,length=12)
b <- seq(to=5,length=12,by=0.2)
d <- 1:10
d <- seq(1,10,1)
d <- seq(length=10,from=1,by=1)# wiederhole 1 10 mal
rep(1,10)## [1] 1 1 1 1 1 1 1 1 1 1
rep("A",10)## [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A"
?pastepaste(1:4)## [1] "1" "2" "3" "4"
paste("A", 1:6, sep = "")## [1] "A1" "A2" "A3" "A4" "A5" "A6"
help.start()help(name)?meanexample(lm)R-project + Was ich schon immer wissen wollte
install.packages("lme4")
library(lme4)Die wichtigsten Pakete zur Visualisierung mit R:
Weitere interessante Pakete
Paket für den Import/Export - foreign
Paket - Latex und R (xtable) (xtable Galerie)
install.packages("devtools")
library(devtools)
install_github("hadley/ggplot2")Gehen Sie auf <cran.r-project.org> und suchen Sie in dem Bereich, wo die Pakete vorgestellt werden, nach Paketen,…
R unterstützt von Haus aus schon einige wichtige Formate:
read.csv()read.fwf()read.delim()So findet man heraus, in welchem Verzeichnis man sich gerade befindet
getwd()So kann man das Arbeitsverzeichnis ändern:
Man erzeugt ein Objekt in dem man den Pfad abspeichert:
main.path <- "C:/" # Beispiel für Windows
main.path <- "/users/Name/" # Beispiel für Mac
main.path <- "/home/user/" # Beispiel für LinuxUnd ändert dann den Pfad mit setwd()
setwd(main.path)Bei Windows ist es wichtig Slashs anstelle von Backslashs zu verwenden.
library(foreign) ist für den Import von fremden Datenformaten nötigread.csv() genutzt werden um die Daten einzulesen.read.csv2() wegen der Komma-Separierung braucht.library(foreign)
?read.csv
?read.csv2Zunächst muss das Arbeitsverzeichnis gesetzt werden, in dem sich die Daten befinden:
Dat <- read.csv("schuldaten_export.csv")Wenn es sich um Deutsche Daten handelt:
Dat <- read.csv2("schuldaten_export.csv")Dateien können auch direkt aus dem Internet geladen werden:
link<- "http://www.statistik.at/web_de/static/
mz_2013_sds_-_datensatz_080469.sav"
?read.spss
Dat <- read.spss(link,to.data.frame=T)rioinstall.packages("rio")library("rio")
x <- import("mtcars.csv")
y <- import("mtcars.rds")
z <- import("mtcars.dta")install.packages("Rz")
library(Rz)Laden Sie den Datensatz mit einer geeigneten Funktion in Ihre Console.
Finden Sie heraus, wieviele Beobachtungen und Variablen der Datensatz umfasst.
read.X() Funktionen stehen viele write.X() Funktionen zur Verfügung.RData)A <- c(1,2,3,4)
B <- c("A","B","C","D")
mydata <- data.frame(A,B)save(mydata, file="mydata.RData")write.csv(mydata,file="mydata.csv") library(xlsx)
write.xlsx(mydata,file="mydata.xlsx") library(foreign)
write.dta(mydata,file="mydata.dta") rio Paketlibrary("rio")
export(mtcars, "mtcars.csv")
export(mtcars, "mtcars.rds")
export(mtcars, "mtcars.dta")Quick R für das Exportieren von Daten:
Hilfe zum Export auf dem cran Server
Public-Use-File (PUF) Datei zur öffentlichen Nutzung - meist stark anonymisierte Daten (Beispiele: FDZ, Statistik Portal, Meine Region )
Scientific-Use-File (SUF) - Datei zur wissenschaftlichen Nutzung - anonymisierte Daten, die zu wissenschaftlichen Zwecken und zur Sekundäranalyse genutzt werden können.
On-Site-Nutzung - Arbeitsplätze für Gastwissenschaftler - Kontrollierte Datenfernverarbeitung
Auf dem Portal datahub.io sind sehr viele Beispieldatensätze in verschiedenen Formaten abrufbar.
Weitere Portale: OpenGov, okfn, enigma, Amazon Web Services (AWS)
Umweltdaten (National climatic data center)
library("FAOSTAT")Public Use File für Soziales in den USA Social security administration
National health and nutrition examination survey
library(survey)
data(nhanes)library(datasets)Beispiel Erdbeben Datensatz:
head(quakes)library(UScensus2010)WDI - World Development Indicators (World Bank) - Einführung in das Paket
library(WDI)WDIsearch('gdp')[1:10,]dat <- WDI(indicator='NY.GDP.PCAP.KD', country=c('MX','CA','US'), start=1960, end=2012)
head(dat)OpenStreetMap (OSM) ist ein kollaboratives Projekt um eine editierbare Weltkarte zu erzeugen.
library(osmar)
api <- osmsource_api()
library(ggmap)cityC <- geocode("Berlin",source="google")
bb <- center_bbox(cityC$lon,cityC$lat,1000, 1000)
uaBerlin <- get_osm(bb, source = api)Ausschnitte von OpenStreetMap für einzelne Städte (metro extracts)
Liste möglicher Datenquellen für räumliche Analysen (weltweit, Deutschland )
SALB - Administrative Grenzen
Kartendaten (openaprs)
library(twitteR)
library(streamR)library(mapdata)
data(worldHiresMapEnv)
map('worldHires', col=1:10)library(GDELTtools)
test.filter <- list(ActionGeo_ADM1Code=c("NI", "US"), ActionGeo_CountryCode="US")
test.results <- GetGDELT(start.date="1979-01-01", end.date="1979-12-31",
filter=test.filter)Mehr Daten hier
link1 <- "http://openflights.svn.sourceforge.net/viewvc/openflights/
openflights/data/airports.dat"
airport <- read.csv(link1, header = F)
link2 <- "http://openflights.svn.sourceforge.net/viewvc/openflights/
openflights/data/routes.dat"
route <- read.csv(link2, header = F)Hafen Daten (Natural earth data)
Data on airports and an example on the usage in R
link <- "http://www.fa-technik.adfc.de/code/opengeodb/DE9.tab"
info <- read.csv(link,sep="\t",header=F)Im base Paket sind die wichtigsten Streuungsmaße enthalten:
var()sd()min() und max()range()ab <- rnorm(100); var(ab)## [1] 0.905472
sd(ab); range(ab)## [1] 0.9515629
## [1] -2.928560 2.096803
min(ab)## [1] -2.92856
max(ab)## [1] 2.096803
NAs vorhanden muss dies der Funktion mitgeteilt werdenab[10] <- NA
var(ab)## [1] NA
Bei fehlenden Werten muss ein weiteres Argument mitgegeben werden:
var(ab,na.rm=T)## [1] 0.896406
table()table() sind auch Kreuztabellierungen möglich indem zwei Variablen durch Komma getrennt werden: table(x,y) liefert Häufigkeiten von y für gegebene Ausprägungen von xx <- sample(1:10,100,replace=T)
table(x)## x
## 1 2 3 4 5 6 7 8 9 10
## 9 10 17 14 6 10 6 10 9 9
musician <- sample(c("yes","no"),100,replace=T)?tabletable(x)## x
## 1 2 3 4 5 6 7 8 9 10
## 9 10 17 14 6 10 6 10 9 9
table(x,musician)## musician
## x no yes
## 1 5 4
## 2 3 7
## 3 11 6
## 4 4 10
## 5 4 2
## 6 5 5
## 7 4 2
## 8 7 3
## 9 5 4
## 10 3 6
data(esoph)
table(esoph$agegp)##
## 25-34 35-44 45-54 55-64 65-74 75+
## 15 15 16 16 15 11
prop.table() liefert die relativen Häufigkeitentable() Funktion geschrieben erhält man die relativen Häufigkeiten bezogen auf alle ZellenDie Funktion prop.table()
table(esoph$agegp,esoph$alcgp)##
## 0-39g/day 40-79 80-119 120+
## 25-34 4 4 3 4
## 35-44 4 4 4 3
## 45-54 4 4 4 4
## 55-64 4 4 4 4
## 65-74 4 3 4 4
## 75+ 3 4 2 2
prop.table?prop.tableprop.table(table(esoph$agegp,
esoph$alcgp),1)##
## 0-39g/day 40-79 80-119 120+
## 25-34 0.2666667 0.2666667 0.2000000 0.2666667
## 35-44 0.2666667 0.2666667 0.2666667 0.2000000
## 45-54 0.2500000 0.2500000 0.2500000 0.2500000
## 55-64 0.2500000 0.2500000 0.2500000 0.2500000
## 65-74 0.2666667 0.2000000 0.2666667 0.2666667
## 75+ 0.2727273 0.3636364 0.1818182 0.1818182
aggregate() Funktion können Kennwerte für Untergruppen erstellt werdenaggregate(x,by,FUN) müssen mindestens drei Argumente übergeben werden:aggregate(state.x77,by=list(state.region),mean)## Group.1 Population Income Illiteracy Life Exp Murder HS Grad
## 1 Northeast 5495.111 4570.222 1.000000 71.26444 4.722222 53.96667
## 2 South 4208.125 4011.938 1.737500 69.70625 10.581250 44.34375
## 3 North Central 4803.000 4611.083 0.700000 71.76667 5.275000 54.51667
## 4 West 2915.308 4702.615 1.023077 71.23462 7.215385 62.00000
## Frost Area
## 1 132.7778 18141.00
## 2 64.6250 54605.12
## 3 138.8333 62652.00
## 4 102.1538 134463.00
x: ein oder mehrere Beobachtungsvektor(en) für den der Kennwert berechnet werden soll
by: eine oder mehrere bedingende Variable(n)
FUN: die Funktion welche den Kennwert berechnet (z.B. mean oder sd)
xtabs() in eine schöne zweidimensionale Tabelle überführt werdenApplyDat <- cbind(1:4,runif(4),rnorm(4))apply(ApplyDat,1,mean)## [1] 0.2525712 1.4252776 1.0209842 1.8218634
apply(ApplyDat,2,mean)## [1] 2.5000000 0.7689200 0.1216024
apply(ApplyDat,1,var)## [1] 0.8120648 0.2849767 3.4899658 3.5719706
apply(ApplyDat,1,sd)## [1] 0.9011464 0.5338321 1.8681450 1.8899658
apply(ApplyDat,1,range)## [,1] [,2] [,3] [,4]
## [1,] -0.7481021 0.9449207 -0.7118865 0.615486
## [2,] 1.0000000 2.0000000 3.0000000 4.000000
apply(ApplyDat,1,length)## [1] 3 3 3 3
Für margin=1 die Funktion mean auf die Reihen angewendet,
Für margin=2 die Funktion mean auf die Spalten angewendet,
Anstatt mean können auch andere Funktionen wie var, sd oder length verwendet werden.
ApplyDat <- data.frame(Income=rnorm(5,1400,200),
Sex=sample(c(1,2),5,replace=T))ApplyDat## Income Sex
## 1 1257.376 1
## 2 1071.330 1
## 3 1105.388 1
## 4 1390.398 2
## 5 1177.605 1
tapply(ApplyDat$Income,ApplyDat$Sex,mean)## 1 2
## 1152.925 1390.398
tapply(ApplyDat$Income,
ApplyDat$Sex,function(x)x)## $`1`
## [1] 1257.376 1071.330 1105.388 1177.605
##
## $`2`
## [1] 1390.398
Die Benutzung von apply, tapply, etc. (Artikel bei R-bloggers)
Erstellen Sie eine Matrix A mit 4 Zeilen und 25 Spalten, die die Werte 1 bis 100 enthält. Analog dazu erstellen Sie eine Matrix B mit 25 Zeilen und 4 Spalten, die die Werte 1 bis 100 enthält.
Berechnen Sie mittels dem apply()-Befehl den Mittelwert und die Varianz für jede Zeile von A bzw. B.
Berechnen Sie mittels dem apply()-Befehl den Mittelwert und die Varianz für jede Spalte von A bzw. B.
Standardisieren ist eine häuge Transformation von Daten; dafür wird der Mittelwert von der entsprechenden Zeile o der Spalte abgezogen und durch die entsprechende Standardab- weichung geteilt. Somit b esitzen die Daten einen Mittelwert von 0 und eine Standardab- weichung von 1. Standardisieren Sie die Spalten der Matrix A .